// //hlsl和glsl的区别
// 1. 变量的声明方式不同
// 2. 函数的声明方式不同
// 3. 函数的参数类型不同
// 4. 函数的返回类型不同
// 5. 函数的参数个数不同
// 6. 函数的参数名不同

// 寄存器和指令
// RenderMonkey是一个基于OpenGL的渲染引擎，它的渲染管线是由多个指令组成的，每个指令都有一个寄存器，寄存器的作用是存储指令的参数，指令的参数可以是常量、变量、函数等。

// d3d管线
// 寄存器是什么？ 

// 在HLSL中，寄存器是GPU中用于存储数据的特殊内存位置。它们是shader程序和GPU硬件之间的桥梁，主要用途包括：

// 1. 数据存储：存储着色器程序中使用的变量、常量和参数
// 2. 数据传输：在CPU和GPU之间，以及shader的不同阶段之间传递数据
// 3. 性能优化：通过直接访问寄存器来提高shader的执行效率

常见的HLSL寄存器类型：
- c# (constant register)：存储常量数据
- s# (sampler register)：存储纹理采样器
- t# (texture register)：存储纹理资源
- v# (vertex shader input register)：存储顶点着色器的输入数据
- o# (output register)：存储着色器的输出数据

示例：
```hlsl
float4x4 worldMatrix : register(c0);    // 使用常量寄存器c0存储世界矩阵
sampler2D texSampler : register(s0);    // 使用采样器寄存器s0存储纹理采样器
Texture2D diffuseMap : register(t0);    // 使用纹理寄存器t0存储漫反射贴图

// 操作符重载什么意思？

// 操作符重载（Operator Overloading）在HLSL中是一个重要的特性，它允许我们为内置的操作符（如+、-、*、/等）定义新的行为，特别是在处理向量和矩阵运算时非常有用。

// HLSL中常见的操作符重载示例：

// 1. 向量运算
// float4 a = float4(1,2,3,4);
// float4 b = float4(5,6,7,8);
// float4 c = a + b;  // 对应位置的分量相加
v.xyzw= v.rgba q;